package com.cmc.cloud.cmclink.doc.convert;

import com.cmc.cloud.cmclink.doc.api.document.req.so.SpecialCargoApplyBaseApiVO;
import com.cmc.cloud.cmclink.doc.entity.SpecialCargoApplyDO;
import com.cmc.cloud.cmclink.doc.vo.special.externalapivo.DgCreateOrUpdateVO;
import com.cmc.cloud.cmclink.doc.vo.special.externalapivo.FlexiCreateOrUpdateVO;
import com.cmc.cloud.cmclink.doc.vo.special.externalapivo.OdoCreateOrUpdateVO;
import com.cmc.cloud.cmclink.doc.vo.special.externalapivo.OogCreateOrUpdateVO;
import com.cmc.cloud.cmclink.doc.vo.specialcargoapplyvo.*;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 特种货审批主信息 Convert
 *
 * @author 集运管理员
 */
@Mapper
public interface SpecialCargoApplyConvert {

    SpecialCargoApplyConvert INSTANCE = Mappers.getMapper(SpecialCargoApplyConvert.class);

    /**
     * 属性转换 convert
     *
     * @param bean
     * @return
     */
    SpecialCargoApplyDO convert(SpecialCargoApplyCreateReqVO bean);

    /**
     * 属性转换 convert
     *
     * @param bean
     * @return
     */
    SpecialCargoApplyDO convert(SpecialCargoApplyUpdateReqVO bean);

    /**
     * 属性转换 convert
     *
     * @param bean
     * @return SpecialCargoApplyRespVO
     */
    SpecialCargoApplyRespVO convert(SpecialCargoApplyDO bean);

    /**
     * 主信息保存转换
     *
     * @param bean
     * @return SpecialCargoApplyDO
     */
    SpecialCargoApplyDO convert(OogCreateOrUpdateVO bean);

    /**
     * 主信息保存转换
     *
     * @param bean
     * @return SpecialCargoApplyDO
     */
    SpecialCargoApplyDO convert(OdoCreateOrUpdateVO bean);

    /**
     * 主信息保存转换
     *
     * @param bean
     * @return SpecialCargoApplyDO
     */
    SpecialCargoApplyDO convert(FlexiCreateOrUpdateVO bean);

    /**
     * 主信息保存转换
     *
     * @param bean
     * @return SpecialCargoApplyDO
     */
    SpecialCargoApplyDO convert(DgCreateOrUpdateVO bean);

    /**
     * 主信息保存转换
     *
     * @param bean
     * @return SpecialCargoApplyDO
     */
    OogCreateOrUpdateVO convertOog(SpecialCargoApplyBaseApiVO bean);
    /**
     * 主信息保存转换
     *
     * @param bean createOrCommitSpcReqVO
     * @return OogCreateOrUpdateVO
     */
    OogCreateOrUpdateVO convertReqOog(CreateOrCommitSpcReqVO bean);

    /**
     * 主信息保存转换
     *
     * @param bean SpecialCargoApplyBaseApiVO
     * @return OdoCreateOrUpdateVO
     */
    OdoCreateOrUpdateVO convertOdo(SpecialCargoApplyBaseApiVO bean);
    /**
     * 主信息保存转换
     *
     * @param bean createOrCommitSpcReqVO
     * @return OdoCreateOrUpdateVO
     */
    OdoCreateOrUpdateVO convertReqOdo(CreateOrCommitSpcReqVO bean);

    /**
     * 主信息保存转换
     *
     * @param bean
     * @return
     */
    FlexiCreateOrUpdateVO convertFlexi(SpecialCargoApplyBaseApiVO bean);
    /**
     * 主信息保存转换
     *
     * @param bean createOrCommitSpcReqVO
     * @return FlexiCreateOrUpdateVO
     */
    FlexiCreateOrUpdateVO convertReqFlexi(CreateOrCommitSpcReqVO bean);

    /**
     * 主信息保存转换
     *
     * @param bean
     * @return
     */
    DgCreateOrUpdateVO convertDg(SpecialCargoApplyBaseApiVO bean);
    /**
     * 主信息保存转换
     *
     * @param bean createOrCommitSpcReqVO
     * @return DgCreateOrUpdateVO
     */
    DgCreateOrUpdateVO convertReqDg(CreateOrCommitSpcReqVO bean);

    /**
     * 属性转换 convert
     *
     * @param bean
     * @return
     */
    SpecialCargoApplyDO convert(OdoCreateOrUpdateReqVO bean);

    /**
     * 属性转换 convert
     *
     * @param bean
     * @return
     */
    SpecialCargoApplyDO convert(FlexiCreateOrUpdateReqVO bean);

    /**
     * 属性转换 convert
     *
     * @param bean
     * @return
     */
    SpecialCargoApplyDO convert(ApplyCreateOrUpdateReqVO bean);

    /**
     * 属性转换 convert
     *
     * @param list
     * @return
     */
    List<SpecialCargoApplyRespVO> convertList(List<SpecialCargoApplyDO> list);

    /**
     * 属性转换
     *
     * @param specialCargoApplyDO
     * @return
     */
    SpecialCargoApplyBaseApiVO convertSpecialCargoApplyBaseApiVo(SpecialCargoApplyDO specialCargoApplyDO);

}
